package com.caiyi.financial.nirvana.sms.util;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.net.util.SubnetUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class IpUtil {

    private static Logger logger = LoggerFactory.getLogger(IpUtil.class);

    private IpUtil() {
    }

    public static boolean load = true;
    private static final List<String> LAN = new ArrayList<>();
    private static final List<String> IPS = new ArrayList<>();

    static {
        LAN.add("10.0.1.0/24");
        LAN.add("10.0.10.0/24");
        LAN.add("10.0.11.0/24");
        LAN.add("10.0.12.0/24");
        LAN.add("10.0.18.0/23");
        LAN.add("10.0.20.0/24");
        LAN.add("10.0.22.0/24");
        LAN.add("10.0.28.0/23");
        LAN.add("10.0.30.0/24");
        LAN.add("10.0.31.0/24");
        LAN.add("10.0.32.0/24");
        LAN.add("10.0.38.0/23");
        LAN.add("192.168.1.0/24");
        LAN.add("192.168.2.0/23");
    }

    public static void main(String[] args) {
        loadAllAddress();
        System.out.print(isLAN("192.168.83.61"));
    }

    /**
     * 加载所有网段ip进入内存
     */
    public static void loadAllAddress() {
        for (String cidrNotation : LAN) {
            SubnetUtils util = new SubnetUtils(cidrNotation);
            String[] ipArray = util.getInfo().getAllAddresses();
            IPS.addAll(Arrays.asList(ipArray));
        }
        logger.info("getAllAddress size : {}", IPS.size());
    }

    /**
     * 是否是局域网
     *
     * @param ip
     * @return true是 false不是
     */
    public static boolean isLAN(String ip) {
        if (StringUtils.isBlank(ip))
            return false;
        return IPS.contains(ip);
    }

}
